//<editor-fold defaultstate="collapsed" desc="VARIABLES GLOBALES">
var grid;
var datos = [];
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="INICIALIZACIONES">
function activarDialogos() {
    $("#dlgNuevo").dialog({
        autoOpen: false,
        height: 'auto',
        width: '600',
        modal: true,
        resizable: false,
        show: 'slide',
        hide: 'fade',
        closeOnEscape: false,
        open: function() {
            $(".ui-dialog").addClass("ui-dialog-shadow");
            $('.ui-dialog-titlebar-close', $(this).parent()).hide();
        }
    });
    $("#dlgEliminar").dialog({
        autoOpen: false,
        height: 'auto',
        width: '400',
        modal: true,
        resizable: false,
        show: 'slide',
        hide: 'fade',
        closeOnEscape: false,
        open: function() {
            $(".ui-dialog").addClass("ui-dialog-shadow");
            $('.ui-dialog-titlebar-close', $(this).parent()).hide();
        }
    });
    $("#dlgModificar").dialog({
        autoOpen: false,
        height: 'auto',
        width: '600',
        modal: true,
        resizable: false,
        show: 'slide',
        hide: 'fade',
        closeOnEscape: false,
        open: function() {
            $(".ui-dialog").addClass("ui-dialog-shadow");
            $('.ui-dialog-titlebar-close', $(this).parent()).hide();
        }
    });
    $("#dlgBuscar").dialog({
        autoOpen: false,
        height: 'auto',
        width: '600',
        modal: true,
        resizable: false,
        show: 'slide',
        hide: 'fade',
        closeOnEscape: false,
        open: function() {
            $(".ui-dialog").addClass("ui-dialog-shadow");
            $('.ui-dialog-titlebar-close', $(this).parent()).hide();
        }
    });
}
function formatter(row, cell, value, columnDef, dataContext) {
    return "<a href='#' onclick='eliminarAlmacen(" + row + ")'><image alt='borrar Almacen' title='borrar' src='resources/images/delete.png'/></a>" +
            "&nbsp;&nbsp;" +
            "<a href='#' onclick='modificarAlmacen(" + row + ")'><image alt='modificar Almacen' title='modificar' src='resources/images/edit.png'/></a>";
}

function inicializarGrid() {
    var columnas = [
        {name: 'Nombre', id: 'nombre', field: 'nombre', width: 300, cssClass: 'izquierda'},
        {name: 'Direccion', id: 'direccion', field: 'direccion', width: 400, cssClass: 'izquierda'},
        {name: 'Poblacion', id: 'poblacion', field: 'poblacion', width: 220, cssClass: 'izquierda'},
        {name: 'Provincia', id: 'provincia', field: 'provincia', width: 220, cssClass: 'izquierda'},
        {name: 'CP', id: 'cp', field: 'cp', width: 102, cssClass: 'centro'},
        {name: '', id: 'id', field: 'id', width: 60, formatter: formatter}
    ];
    var opciones = {
        enableCellNavigation: true,
        enableColumnReorder: true,
        rowHeight: 25
    };

    grid = new Slick.Grid("#tabla", datos, columnas, opciones);
    grid.onClick.subscribe(function(e, args) {
        mostrarDatos(args);
    });
    grid.setSelectionModel(new Slick.RowSelectionModel());
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="GESTION DE DIÁLOGOS">
function buscarAlmacen() {
    $("#dlgBuscar").dialog('open');
}

function nuevoAlmacen() {
    $("#dlgNuevo").dialog('open');
}

function modificarAlmacen(row) {
    $("#dlgModificar").dialog('open');
}

function eliminarAlmacen(row) {
    $('#dlgEliminar').find('#id').val(datos[row].id);
    $('#dlgEliminar').find('#nombre').html(datos[row].nombre);
    $("#dlgEliminar").dialog('open');
}

function cerrarDialogo(dialogo) {
    $(dialogo).dialog('close');
    $('.err').html('');
    $('.loading').hide();
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="OPERACIONES CRUD ALMACEN">
/*Basicamente, todas las operaciones CRUD consisten en una petición Ajax a un 
 * ActionForm determinado que varía dependiendo de la entidad tratada.
 * La acción a realizar (buscar, grabar, etc) se aporta al vuelo a través
 * de la etiqueta con id 'opcion' de su correspondiente formulario, que a su vez
 * está vinculada con el atributo 'opcion' del ActionForm.
 * 
 * Posteriormente, se trata el error o la información recibidos, mostrando el primero
 * en la etiqueta destinada a recoger los errores y la segunda (data en formato JSON)
 * en el grid de datos apropiado. 
 * 
 * El resto del código se dedica a mostrar/ocultar animaciones de carga y a cerrar 
 * las ventanas de diálogo.
 */
function buscar() {
    $('#formBuscar').find('#opcion').val('buscar');
    var formulario = new FormData($('#formBuscar')[0]);
    $('.loading').show();
    $.ajax({
        type: "POST",
        url: "/Phama/almacenes.do",
        data: formulario,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
            $('.err').html(errorMessage);
            $('.loading').hide();
        },
        success: function(data) {
            datos = $.parseJSON(data);
            grid.setData(datos);
            grid.invalidate();
            resetearFormularioPrincipal();
            $('.err').html('');
            $('#dlgBuscar').dialog('close');
            $('.loading').hide();
        }
    });
}

function grabar() {
    $('#formNuevo').find('#opcion').val('grabar');
    var formulario = new FormData($('#formNuevo')[0]);
    $('.loading').show();
    $.ajax({
        type: "POST",
        url: "/Phama/almacenes.do",
        data: formulario,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
            $('#erroresNuevo').html(errorMessage);
            $('.loading').hide();
        },
        success: function(data) {
            var errores = $('#erroresNuevo', $(data));
            if (errores.text() !== '') {
                $('#erroresNuevo').html(errores);
            } else {
                if (data.indexOf('excepcion') > 0) {
                    $('#erroresNuevo').html(data);
                } else {
                    $('#erroresNuevo').html('');
                    buscar();
                    $('#dlgNuevo').dialog('close');
                    $('#formNuevo')[0].reset();
                }
            }
            $('.loading').hide();
        }
    });
}

function getAlmacen(almacenId) {
    $('#formGetAlmacen').find('#opcion').val('getAlmacen');
    $('#formGetAlmacen').find('#id').val(almacenId);
    var formulario = new FormData($('#formGetAlmacen')[0]);
    $('.loading').show();
    $.ajax({
        type: "POST",
        url: "/Phama/almacenes.do",
        data: formulario,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
            $('#erroresModificar').html(errorMessage);
            $('.loading').hide();
        },
        success: function(data) {
            var errores = $('#erroresModificar', $(data));
            if (errores.text() !== '') {
                $('#erroresModificar').html(errores);
            } else {
                $('#erroresModificar').html('');
                buscar();
                $('#dlgEliminar').dialog('close');
                $('#formEliminar')[0].reset();
            }
            $('.loading').hide();
        }
    });
}

function eliminar() {
    $('#formEliminar').find('#opcion').val('eliminar');
    var formulario = new FormData($('#formEliminar')[0]);
    $('.loading').show();
    $.ajax({
        type: "POST",
        url: "/Phama/almacenes.do",
        data: formulario,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
            $('#erroresEliminar').html(errorMessage);
            $('.loading').hide();
        },
        success: function(data) {
            var errores = $('#erroresEliminar', $(data));
            if (errores.text() !== '') {
                $('#erroresEliminar').html(errores);
            } else {
                buscar();
                $('#dlgEliminar').dialog('close');
                $('#formEliminar')[0].reset();
                resetearFormularioPrincipal();
            }
            $('.loading').hide();
        }
    });
}

function modificar() {
    $('#formModificar').find('#opcion').val('modificar');
    var formulario = new FormData($('#formModificar')[0]);
    $('.loading').show();
    $.ajax({
        type: "POST",
        url: "/Phama/almacenes.do",
        data: formulario,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
            $('#erroresModificar').html(errorMessage);
            $('.loading').hide();
        },
        success: function(data) {
            var errores = $('#erroresModificar', $(data));
            if (errores.text() !== '') {
                $('#erroresModificar').html(errores);
            } else {
                if (data.indexOf('excepcion') > 0) {
                    $('#erroresModificar').html(data);
                } else {
                    buscar();
                    $('#dlgModificar').dialog('close');
                }
            }
            $('.loading').hide();
        }
    });
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="FUNCIONES AUXILIARES">
function resetearFormularioPrincipal() {
    $('#erroresModificar').html('');
    $('.modId').val('');
    $('.modNombre').val('');
    $('.modIdDireccion').val('');
    $('.modDireccion').val('');
    $('.modPoblacion').val('');
    $('.modProvincia').val('');
    $('.modCp').val('');

}


function mostrarDatos(args) {
    var almacen = datos[args.row];
    $('.modId').val(almacen.id);
    $('.modNombre').val(almacen.nombre);
    $('.modIdDireccion').val(almacen.idDireccion);
    $('.modDireccion').val(almacen.direccion);
    $('.modPoblacion').val(almacen.poblacion);
    $('.modProvincia').val(almacen.provincia);
    $('.modCp').val(almacen.cp);
}
//</editor-fold>